When initializing or booting a computer platform, there are two primary stages of system evolution. First, in the pre-boot environment, the system performs tasks such as preparing the hardware, discovering and/or checking the memory, initializing the chipset, and so on. These tasks may be performed by BIOS or firmware in order to prepare the system to boot a target. Typically, the target to be booted is an operating system (O/S). After the target is booted, the system is in a run-time environment controlled by the O/S.
In the case of a catastrophic failure, there is relatively little visibility into the cause of an error within the pre-boot environment. Within the pre-boot environment itself, errors may be detected using a Power-On Self Test (POST) card, or other debug techniques. However, debug techniques such as POST do not typically provide a comprehensive log of pre-boot data; they simply provide information about the point at which a critical error has occurred.
There is also no mechanism by which the operating system may be notified of other non-critical issues that are encountered during pre-boot. The operating system and programs which are running on the O/S must rely upon the integrity of the underlying operating system and platform in order to function correctly. The existence of a non-critical error in the pre-boot environment may lead to a critical error or failure in the run-time environment. The O/S has no visibility of certain hardware issues that occurred during the pre-boot which the firmware would be aware of. Some examples of hardware problems that may occur in the pre-boot environment which the O/S may not be aware of, and that a user may not be able to find in a dump file, include the existence of a bad microprocessor (CPU), problems with chipset timing, or a bad disk.